package com.zwx.aray.leetcode_3;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 两个数组中的交集
 *
 * @author 文希
 * @create 2019-05-08 23:13
 */
public class Intersect {
    public static void main(String[] args) {
        int[] nums1 = new int[]{1, 2, 2, 1,2};
        int[] nums2 = new int[]{2, 2,2,1,1};
        int[] interserct = interserct(nums1, nums2);
        for (int i : interserct) {
            System.out.println("i = " + i);
        }
    }

    private static int[] interserct(int[] nums1, int[] nums2) {
        // 用来暂存结果，保存数组的长度以及各元素的值
        List<Integer> tmp = new ArrayList<>();
        HashMap<Integer, Integer> map = new HashMap<>();
        // 保存nums1中元素的个数
        for (int i = 0; i < nums1.length; i++) {
            Integer temp = map.get(nums1[i]);
            map.put(nums1[i], (temp == null ? 1 : temp + 1));
        }

        // 遍历nums2，查询
        for (int i = 0; i < nums2.length; i++) {
            if (map.containsKey(nums2[i]) && map.get(nums2[i]) != 0) {
                //存放该元素，且次数>0,则次数-1
                tmp.add(nums2[i]);
                map.put(nums2[i], map.get(nums2[i]) - 1);
            }
        }
        int[] result = new int[tmp.size()];
        int i = 0;
        for (Integer in : tmp) {
            result[i++] = in;
        }
        return result;
    }
}
